package com.spsoft.vatoutinv.service.vmshzqrdmanage;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.spsoft.core.model.Result;
import com.spsoft.vatoutinv.model.dto.vmshzqrdmanage.VmsApprovalHzqrdPageDto;
import com.spsoft.vatoutinv.model.dto.vmshzqrdmanage.VmsApprovalHzqrdTotalDto;
import com.spsoft.vatoutinv.model.dto.vmshzqrdmanage.VmsHclzfpPageDto;
import com.spsoft.vatoutinv.model.vo.vmsfulloutinvoice.VmsFullOutInvoicePageVO;
import com.spsoft.vatoutinv.model.vo.vmshzqrdmanage.VmsApprovalHzqrdTotalSimpleVo;
import com.spsoft.vatoutinv.model.vo.vmshzqrdmanage.VmsApprovalHzqrdVo;

import java.math.BigDecimal;
import java.util.Map;

/**
 * 红字确认单申请 服务类
 *
 * @author : chenxudong
 * @date : 2024/1/4 17:13
 */
public interface VmsHzqrdApplyService {

    /**
     * 红字确认单申请主界面-分页查询
     */
    Result<IPage<VmsApprovalHzqrdVo>> pageApply(VmsApprovalHzqrdPageDto pageDto);

    /**
     * 红字确认单申请-红冲蓝字发票选择页面-分页查询
     */
    Result<IPage<VmsFullOutInvoicePageVO>> pageInvoice(VmsHclzfpPageDto pageDto);

    /**
     * 红字确认单申请-新增子界面-快速添加
     */
    Result<VmsApprovalHzqrdTotalSimpleVo> fastAdd(String lzfpdm, String lzfphm, Long applyId);

    /**
     * 保存红字确认单申请信息
     */
    Result<Object> saveApply(VmsApprovalHzqrdTotalDto applyDto);

    /**
     * 撤销红字确认单申请
     */
    Result<Object> revokeApply(Long id);

    /**
     * 调用乐企数电红字确认单申请接口完成申请
     */
    Result<Object> hzqrdApply(Long applyId);

    /**
     * 获取红字确认单申请信息详情
     */
    Result<VmsApprovalHzqrdTotalSimpleVo> getApplyDetail(Long applyId);

    /**
     * 根据老系统数据计算蓝票明细已经冲红的数量、金额、税额
     * @param fpdm 蓝字发票代码
     * @param fphm 蓝字发票号码
     * @return map中key为蓝字明细序号，value为已冲销数量、金额、税额
     */
    Map<Long, Map<String, BigDecimal>> calculateHasBeenRed(String fpdm, String fphm);
}
